package Day17;

/**
 * --------------------------------------------------------------------------------------------
 * 题目：
 *      某种外星语也使用英文小写字母，但可能顺序 order 不同。字母表的顺序（order）是一些小写字母的排列。
 *      给定一组用外星语书写的单词 words，以及其字母表的顺序 order，
 *      只有当给定的单词在这种外星语中按字典序排列时，返回 true；否则，返回 false。
 * --------------------------------------------------------------------------------------------
 * 示例：
 *      输入：words = ["hello","leetcode"], order = "hlabcdefgijkmnopqrstuvwxyz"
 *      输出：true
 *      解释：在该语言的字母表中，'h' 位于 'l' 之前，所以单词序列是按字典序排列的。
 * --------------------------------------------------------------------------------------------
 * 方法：
 *      建立重排列
 * --------------------------------------------------------------------------------------------
 */
class Solution {
    public static void main(String[] args) {
        String[] words = new String[]{"hello","leetcode"};
        String order = "hlabcdefgijkmnopqrstuvwxyz";
        System.out.println(isAlienSorted(words,order));
    }
    static int[] ord;
    public static boolean isAlienSorted(String[] words, String order) {
        ord = new int[26];
        for(int i=0;i<26;++i){
            ord[order.charAt(i)-'a']=i;
        }
        for(int i=1;i<words.length;++i){
            if(!myCompareTo(words[i-1],words[i])){
                return false;
            }
        }
        return true;
    }
    public static boolean myCompareTo(String s1,String s2){
        for(int i=0;i<s1.length()||i<s2.length();++i){
            if(i==s2.length()){
                return false;
            }
            if(i==s1.length()){
                return true;
            }
            if(s1.charAt(i)!=s2.charAt(i)){
                return ord[s1.charAt(i)-'a']<ord[s2.charAt(i)-'a'];
            }
        }
        return true;
    }
}